home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / libq / IIgetc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  2.5 KB  |  158 lines

  1. # include    <ingres.h>
  2. # include    "IIglobals.h"
  3. # include    <sccs.h>
  4.  
  5. SCCSID(@(#)IIgetc.c    8.1    12/31/84)
  6.  
  7.  
  8. /*
  9. **  IIGETC.C -- File input routines
  10. **
  11. **    Defines:
  12. **        IIfopen()
  13. **        IIgetc()
  14. **        IIclose()
  15. **
  16. **    Requires:
  17. **        read()
  18. **        open()
  19. **
  20. **    Required By:
  21. **        IIp_err() -- to get text from error files
  22. **        IIgetpath();
  23. **        USER -- as Input routines
  24. **
  25. **    History:
  26. **        11/21/78 -- (marc) written to free IIp_err() [IIp_err.c] from
  27. **            depending on a single I/O package
  28. */
  29.  
  30.  
  31.  
  32. /*
  33. **  IIFOPEN -- Buffered input file open
  34. **
  35. **    Entirely analogous to fopen(III).
  36. **
  37. **    Parameters:
  38. **        file - file name to open for READ only
  39. **        iobuf - iob struct to use for this file
  40. **
  41. **    Returns:
  42. **        0  success
  43. **        -1 failure (errno set by open(II) call)
  44. **
  45. **    Side Effects:
  46. **        file activity
  47. **        sets up iobuf
  48. **
  49. **    Requires:
  50. **        open()
  51. **
  52. **    Called By:
  53. **        IIp_err() [IIp_err.c]
  54. **        USER
  55. **
  56. **    History:
  57. **        11/21/78 -- (marc) written
  58. */
  59.  
  60. IIfopen(file, iobuf)
  61. char        *file;
  62. struct iob    *iobuf;
  63. {
  64.     register struct iob    *b;
  65.  
  66.     b = iobuf;
  67.     if ((b->fildes = open(file, 0)) < 0)
  68.         return (-1);
  69.     b->nleft = 0;
  70.     return (0);
  71. }
  72.  
  73. /*
  74. **  IIGETC -- Get a character from a file using buffered input
  75. **
  76. **    Entirely analogous to getc(III).
  77. **
  78. **    Parameters:
  79. **        iobuf -- iob struct for the file from which the character
  80. **            is to be taken
  81. **
  82. **    Returns:
  83. **        next character from file (16-bit no sign extension)
  84. **        -1 -- EOF or error (errno set by read)
  85. **
  86. **    Side Effects:
  87. **        file activity - may do a read ()
  88. **        fuddles iobuf to reflect number of characters left after call
  89. **
  90. **    Requires:
  91. **        read()
  92. **        an fopen(III) or IIfopen() [IIgetc.c] call on iobuf before
  93. **            being called. (It is unwise to call fopen(), the 
  94. **            IIgetc(), because fopen() and getc(III) are both 
  95. **            in /usr/source/s4/getc.c so the code will be 
  96. **            duplicated).
  97. **
  98. **    Called By:
  99. **        IIp_err() [IIp_err.c]
  100. **        USER
  101. **
  102. **    History:
  103. **        11/21/78 -- (marc) written
  104. */
  105.  
  106. IIgetc(iobuf)
  107. struct iob    *iobuf;
  108. {
  109.     register struct iob    *b;
  110.     register        i;
  111.     register        c;
  112.  
  113.     b = iobuf;
  114.     if (--b->nleft >= 0)
  115.     {
  116.         c = *b->nextp++ & 0377;
  117.         return (c);
  118.     }
  119.     
  120.     /* else fill the buffer */
  121.     i = read(b->fildes, b->buff, sizeof b->buff);
  122.     if (i > 0)
  123.     {
  124.         b->nextp = b->buff;
  125.         b->nleft = --i;
  126.         c = *b->nextp++ & 0377;
  127.         return (c);
  128.     }
  129.     /* EOF or error */
  130.     return (-1);
  131. }
  132.  
  133. /*
  134. **  IICLOSE -- Close a file opened with IIfopen
  135. **
  136. **    Parameters:
  137. **        buf -- io buffer
  138. **
  139. **    Returns:
  140. **        < 0 one error (errno set)
  141. **
  142. **    Side Effects:
  143. **        closes file
  144. **
  145. **    Requires:
  146. **        close(II)
  147. **
  148. **    Called By:
  149. **        USER
  150. */
  151.  
  152. IIclose(buf)
  153. struct iob    *buf;
  154. {
  155.  
  156.     return (close(buf->fildes));
  157. }
  158.